package handler

import (
	"database-platform/handler/common"
	"database-platform/logger"
	"database-platform/model"
	"database-platform/service"
	"fmt"
	"github.com/gin-gonic/gin"
)

// ListClusterHandler 处理获取集群列表的请求
func ListClusterHandler(c *gin.Context) {
	params, err := getClusterListParams(c)
	if err != nil {
		msg := fmt.Sprintf("ListClusterHandler.error.message.%s", err.Error())
		logger.Logger.Error(msg)
		common.FailWithMsg(c, "参数解析错误")
		return
	}

	res, err := service.GetClusterList(params)
	if err != nil {
		common.FailWithMsg(c, err.Error())
		return
	}
	common.OkWithData(c, res)
}

func getClusterListParams(c *gin.Context) (params *model.ClusterListRequest, err error) {
	params = &model.ClusterListRequest{
		Name:        c.DefaultQuery("name", ""),
		DBType:      c.DefaultQuery("db_type", ""),
		BusinessOne: c.DefaultQuery("business_one", ""),
		BusinessTwo: c.DefaultQuery("business_two", ""),
		Level:       c.DefaultQuery("level", ""),
		ClusterType: c.DefaultQuery("cluster_type", ""),
		Env:         c.DefaultQuery("env", ""),
		Unit:        c.DefaultQuery("unit", ""),
		Status:      c.DefaultQuery("status", ""),
		Search:      c.DefaultQuery("search", ""),
	}
	params.Page, params.PageSize = common.GetPagePageSizeParams(c)
	return params, err
}

func RetrieveClusterHandler(c *gin.Context) {
	id, err := common.GetIdParams(c)
	if err != nil {
		logger.Logger.Error(fmt.Sprintf("RetrieveClusterHandler.error.message.%s", err.Error()))
		common.FailWithMsg(c, err.Error())
		return
	}
	result, err := service.GetClusterById(id)
	if err != nil {
		msg := fmt.Sprintf("RetrieveClusterHandler.error.message.%s", err.Error())
		logger.Logger.Error(msg)
		common.FailWithMsg(c, fmt.Sprintf("获取详情错误，id:%v, err:%s", id, err.Error()))
		return
	}
	common.OkWithData(c, result)
}

// InsertClusterHandler 处理插入集群记录的请求
func InsertClusterHandler(c *gin.Context) {

	var cluster model.Cluster
	if err := c.ShouldBindJSON(&cluster); err != nil {
		logger.Logger.Error(fmt.Sprintf("InsertClusterHandler.error.message.%s", err.Error()))
		common.FailWithMsg(c, "参数解析错误")
		return
	}

	err := service.InsertCluster(&cluster)
	if err != nil {
		msg := fmt.Sprintf("InsertClusterHandler.error.message.%s", err.Error())
		logger.Logger.Error(msg)
		common.FailWithMsg(c, err.Error())
		return
	}
	common.OkWithMsg(c, "插入成功")
}

// UpdateClusterHandler 处理更新集群记录的请求
func UpdateClusterHandler(c *gin.Context) {
	id, err := common.GetIdParams(c)
	if err != nil {
		logger.Logger.Error(fmt.Sprintf("UpdateClusterHandler.error.message.%s", err.Error()))
		common.FailWithMsg(c, err.Error())
		return
	}

	var cluster model.Cluster
	if err := c.ShouldBindJSON(&cluster); err != nil {
		logger.Logger.Error(fmt.Sprintf("UpdateClusterHandler.error.message.%s", err.Error()))
		common.FailWithMsg(c, "参数解析错误")
		return
	}

	err = service.UpdateCluster(id, &cluster)
	if err != nil {
		logger.Logger.Error(fmt.Sprintf("UpdateClusterHandler.error.message.%s", err.Error()))
		common.FailWithMsg(c, err.Error())
		return
	}
	common.OkWithMsg(c, "更新成功")
}

// DeleteClusterHandler 处理删除集群记录的请求
func DeleteClusterHandler(c *gin.Context) {
	id, err := common.GetIdParams(c)
	if err != nil {
		logger.Logger.Error(fmt.Sprintf("DeleteClusterHandler.error.message.%s", err.Error()))
		common.FailWithMsg(c, err.Error())
		return
	}

	err = service.DeleteCluster(id)
	if err != nil {
		msg := fmt.Sprintf("DeleteClusterHandler.error.message.%s", err.Error())
		logger.Logger.Error(msg)
		common.FailWithMsg(c, err.Error())
		return
	}
	common.OkWithMsg(c, "删除成功")
}
